light、fast RNN。

本文重点关注RNN cell的进化史,而非网络架构。

RNN的进化史,从简单到复杂(LSTM),然后浓缩(SRU、)





类似,先提出一种暴力解法,然后再优化的过程。

  1. LightRNN: Memory and Computation-Efficient Recurrent Neural Networks, NIPS 2016
  2. cudnnLSTM
    • 传统LSTM,8个矩阵,4个bias。cudnnLSTM,额外多了4个bias。用于加速
  3. Quasi-RNN
  4. bypass 的思想
    • 借鉴resnet
  5. attention的思想
    • single_point -> moving_average -> attention

并行加速

lstm的并行,通常是强制性的。

几套lstm,多卡运行,然后利用tower_grads的方式,更新参数。

小矩阵 类似SVD分解

CNN

使用纯 CNN 模型超过 RNN 并不是一件容易的事情。QRNN 则可以逐层替代原有的 RNN,使用起来门槛要低很多,而且加速效果有保证

https://blog.csdn.net/JackyTintin/article/details/77945354

QRNN 没有纯 CNN 模型(e.g. WaveNet)那么激进,依然保留了一些循环结构。

keras code: https://github.com/DingKe/nn_playground/tree/master/qrnn

GRU

SRU(Simple Recurrent Unit)。这实质上是 QRNN window 宽度取1的特殊情况(即使用普通的线性变换)。不同的是,SRU 将 highway 连接作为模型的一部分(QRNNs当然可以加残差或 highway 连接)。

SRU

扩展阅读

  • Optimizing Performance of Recurrent Neural Networks on GPUs, 2016, Nvidia
    ent Neural Networks on GPUs, 2016, Nvidia